#include "main.h"

#define KEY_SCAN_INTERVAL 20 // ms

extern TIM_HandleTypeDef htim9;
extern TIM_HandleTypeDef htim13;

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if (GPIO_Pin == KEY1_Pin || GPIO_Pin == KEY2_Pin || GPIO_Pin == KEY3_Pin || GPIO_Pin == KEY4_Pin)
    {
        HAL_TIM_Base_Start_IT(&htim13);
    }
    else if (GPIO_Pin == TRIGGER_Pin)
    {
    }
}

void KeyScan_Run()
{
    static uint8_t key = 0;
    static uint16_t timer = 0;

    timer += KEY_SCAN_INTERVAL;
    if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET)
    {
        key = 1;
    }
    else if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == GPIO_PIN_RESET)
    {
        key = 2;
    }
    else if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == GPIO_PIN_RESET)
    {
        key = 3;
    }
    else if (HAL_GPIO_ReadPin(KEY4_GPIO_Port, KEY4_Pin) == GPIO_PIN_RESET)
    {
        key = 4;
    }
    else
    {
        if (timer < (KEY_SCAN_INTERVAL * 7 + 1)) // 判断短按
        {
            if (key == 1)
            {
            }
            else if (key == 2)
            {
            }
            else if (key == 3)
            {
            }
            else if (key == 4)
            {
            }
        }
        key = 0;
        timer = 0;
        HAL_TIM_Base_Stop_IT(&htim13);
    }
}